#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-
import sys

import globales
import errores
import gencodigo
import analex, anasin

def main():
  escribeLexico= 0
  escribeAST= 0
  f= sys.stdin
  for arg in sys.argv[1:]:
    if arg=="-l":
      escribeLexico=1
    elif arg=="-s":
      escribeAST= 1
    elif arg=="-v":
      globales._debug= 1
    else:
      try:
        f= open(arg)
      except:
        sys.stderr.write("Error, no he podido abrir %s para lectura.\n" % arg)
        sys.exit(1)
      break

  if escribeLexico:
    Alex= analex.AnalizadorLexico(f)
    Alex.avanza()
    while Alex.actual.cat!= "_EOF":
      print Alex.actual
      Alex.avanza()
  else:
    Asin= anasin.AnalizadorSintactico(f)
    Asin.arb.compsemanticas()
    for f in globales.Funciones:
      f.compsemanticas()
    if escribeAST:
      if errores.errores:
        errores.escribeErrores(sys.stderr)
      print Asin.arb
      for f in globales.Funciones:
        print f.arbol()
    else:
      if errores.errores:
        errores.escribeErrores(sys.stderr)
        sys.exit(1)
      else:
        gencodigo.gencodigo(Asin.arb, globales.Funciones, globales.Cadenas, globales.VariablesGlobales)

if __name__=="__main__":
  try:
    my_main= main
  except NameError:
    def my_main():
      anasin.AnalizadorSintactico(sys.stdin)
  my_main()
